
<!DOCTYPE html>

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />

  <title>try_run &mdash; CMake 3.27.4 Documentation</title>

    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
    <link rel="stylesheet" type="text/css" href="../_static/cmake.css" />
    
    <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
    <script src="../_static/jquery.js"></script>
    <script src="../_static/underscore.js"></script>
    <script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
    <script src="../_static/doctools.js"></script>
    <script src="../_static/sphinx_highlight.js"></script>
    
    <link rel="shortcut icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="ctest_build" href="ctest_build.html" />
    <link rel="prev" title="try_compile" href="try_compile.html" />
 

  </head><body>

    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="ctest_build.html" title="ctest_build"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="try_compile.html" title="try_compile"
             accesskey="P">previous</a> |</li>
  <li>
    <img src="../_static/cmake-logo-16.png" alt=""
         style="vertical-align: middle; margin-top: -2px" />
  </li>
  <li>
    <a href="https://cmake.org/">CMake</a> &#187;
  </li>
  <li>
    <a href="../index.html">3.27.4 Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-commands.7.html" accesskey="U">cmake-commands(7)</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">try_run</a></li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <section id="try-run">
<span id="command:try_run"></span><h1><a class="toc-backref" href="#id1" role="doc-backlink">try_run</a><a class="headerlink" href="#try-run" title="Permalink to this heading">¶</a></h1>
<nav class="contents" id="contents">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><p><a class="reference internal" href="#try-run" id="id1">try_run</a></p>
<ul>
<li><p><a class="reference internal" href="#try-compiling-and-running-source-files" id="id2">Try Compiling and Running Source Files</a></p></li>
<li><p><a class="reference internal" href="#other-behavior-settings" id="id3">Other Behavior Settings</a></p></li>
<li><p><a class="reference internal" href="#behavior-when-cross-compiling" id="id4">Behavior when Cross Compiling</a></p></li>
</ul>
</li>
</ul>
</nav>
<p>Try compiling and then running some code.</p>
<section id="try-compiling-and-running-source-files">
<h2><a class="toc-backref" href="#id2" role="doc-backlink">Try Compiling and Running Source Files</a><a class="headerlink" href="#try-compiling-and-running-source-files" title="Permalink to this heading">¶</a></h2>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">try_run(</span><span class="nv">&lt;runResultVar&gt;</span><span class="w"> </span><span class="nv">&lt;compileResultVar&gt;</span>
<span class="w">        </span><span class="o">&lt;</span><span class="no">SOURCES</span><span class="w"> </span><span class="nv">&lt;srcfile...&gt;</span><span class="w">                 </span><span class="p">|</span>
<span class="w">         </span><span class="no">SOURCE_FROM_CONTENT</span><span class="w"> </span><span class="nv">&lt;name&gt;</span><span class="w"> </span><span class="nv">&lt;content&gt;</span><span class="w"> </span><span class="p">|</span>
<span class="w">         </span><span class="no">SOURCE_FROM_VAR</span><span class="w"> </span><span class="nv">&lt;name&gt;</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="w">         </span><span class="p">|</span>
<span class="w">         </span><span class="no">SOURCE_FROM_FILE</span><span class="w"> </span><span class="nv">&lt;name&gt;</span><span class="w"> </span><span class="nv">&lt;path&gt;</span><span class="w">       </span><span class="o">&gt;</span><span class="p">...</span>
<span class="w">        </span><span class="p">[</span><span class="no">LOG_DESCRIPTION</span><span class="w"> </span><span class="nv">&lt;text&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">NO_CACHE</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">NO_LOG</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">CMAKE_FLAGS</span><span class="w"> </span><span class="nv">&lt;flags&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">COMPILE_DEFINITIONS</span><span class="w"> </span><span class="nv">&lt;defs&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">LINK_OPTIONS</span><span class="w"> </span><span class="nv">&lt;options&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">LINK_LIBRARIES</span><span class="w"> </span><span class="nv">&lt;libs&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">COMPILE_OUTPUT_VARIABLE</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">COPY_FILE</span><span class="w"> </span><span class="nv">&lt;fileName&gt;</span><span class="w"> </span><span class="p">[</span><span class="no">COPY_FILE_ERROR</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]]</span>
<span class="w">        </span><span class="p">[</span><span class="nv">&lt;LANG&gt;</span><span class="nb">_STANDARD</span><span class="w"> </span><span class="nv">&lt;std&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="nv">&lt;LANG&gt;</span><span class="nb">_STANDARD_REQUIRED</span><span class="w"> </span><span class="nv">&lt;bool&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="nv">&lt;LANG&gt;</span><span class="nb">_EXTENSIONS</span><span class="w"> </span><span class="nv">&lt;bool&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">RUN_OUTPUT_VARIABLE</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">RUN_OUTPUT_STDOUT_VARIABLE</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">RUN_OUTPUT_STDERR_VARIABLE</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">WORKING_DIRECTORY</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">ARGS</span><span class="w"> </span><span class="nv">&lt;args&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="nf">)</span>
</pre></div>
</div>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.25.</span></p>
</div>
<p>Try building an executable from one or more source files.  Build success
returns <code class="docutils literal notranslate"><span class="pre">TRUE</span></code> and build failure returns <code class="docutils literal notranslate"><span class="pre">FALSE</span></code> in <code class="docutils literal notranslate"><span class="pre">&lt;compileResultVar&gt;</span></code>.
If the build succeeds, this runs the executable and stores the exit code in
<code class="docutils literal notranslate"><span class="pre">&lt;runResultVar&gt;</span></code>.  If the executable was built, but failed to run, then
<code class="docutils literal notranslate"><span class="pre">&lt;runResultVar&gt;</span></code> will be set to <code class="docutils literal notranslate"><span class="pre">FAILED_TO_RUN</span></code>.  See command
<span class="target" id="index-0-command:try_compile"></span><a class="reference internal" href="try_compile.html#command:try_compile" title="try_compile"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">try_compile()</span></code></a> for documentation of options common to both commands,
and for information on how the test project is constructed to build the source
file.</p>
<p>One or more source files must be provided. Additionally, one of <code class="docutils literal notranslate"><span class="pre">SOURCES</span></code>
and/or <code class="docutils literal notranslate"><span class="pre">SOURCE_FROM_*</span></code> must precede other keywords.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.26: </span>This command records a
<a class="reference internal" href="../manual/cmake-configure-log.7.html#try-run-configure-log-event"><span class="std std-ref">configure-log try_run event</span></a>
if the <code class="docutils literal notranslate"><span class="pre">NO_LOG</span></code> option is not specified.</p>
</div>
<p>This command supports an alternate signature for CMake older than 3.25.
The signature above is recommended for clarity.</p>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">try_run(</span><span class="nv">&lt;runResultVar&gt;</span><span class="w"> </span><span class="nv">&lt;compileResultVar&gt;</span>
<span class="w">        </span><span class="nv">&lt;bindir&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="nb">srcfile</span><span class="p">|</span><span class="no">SOURCES</span><span class="w"> </span><span class="nb">srcfile...</span><span class="o">&gt;</span>
<span class="w">        </span><span class="p">[</span><span class="no">CMAKE_FLAGS</span><span class="w"> </span><span class="nv">&lt;flags&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">COMPILE_DEFINITIONS</span><span class="w"> </span><span class="nv">&lt;defs&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">LINK_OPTIONS</span><span class="w"> </span><span class="nv">&lt;options&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">LINK_LIBRARIES</span><span class="w"> </span><span class="nv">&lt;libs&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">COMPILE_OUTPUT_VARIABLE</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">COPY_FILE</span><span class="w"> </span><span class="nv">&lt;fileName&gt;</span><span class="w"> </span><span class="p">[</span><span class="no">COPY_FILE_ERROR</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]]</span>
<span class="w">        </span><span class="p">[</span><span class="nv">&lt;LANG&gt;</span><span class="nb">_STANDARD</span><span class="w"> </span><span class="nv">&lt;std&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="nv">&lt;LANG&gt;</span><span class="nb">_STANDARD_REQUIRED</span><span class="w"> </span><span class="nv">&lt;bool&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="nv">&lt;LANG&gt;</span><span class="nb">_EXTENSIONS</span><span class="w"> </span><span class="nv">&lt;bool&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">RUN_OUTPUT_VARIABLE</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">OUTPUT_VARIABLE</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">WORKING_DIRECTORY</span><span class="w"> </span><span class="nv">&lt;var&gt;</span><span class="p">]</span>
<span class="w">        </span><span class="p">[</span><span class="no">ARGS</span><span class="w"> </span><span class="nv">&lt;args&gt;...</span><span class="p">]</span>
<span class="w">        </span><span class="nf">)</span>
</pre></div>
</div>
<p>The options specific to <code class="docutils literal notranslate"><span class="pre">try_run</span></code> are:</p>
<dl>
<dt><code class="docutils literal notranslate"><span class="pre">COMPILE_OUTPUT_VARIABLE</span> <span class="pre">&lt;var&gt;</span></code></dt><dd><p>Report the compile step build output in a given variable.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">OUTPUT_VARIABLE</span> <span class="pre">&lt;var&gt;</span></code></dt><dd><p>Report the compile build output and the output from running the executable
in the given variable.  This option exists for legacy reasons and is only
supported by the old <code class="docutils literal notranslate"><span class="pre">try_run</span></code> signature.
Prefer <code class="docutils literal notranslate"><span class="pre">COMPILE_OUTPUT_VARIABLE</span></code> and <code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_VARIABLE</span></code> instead.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_VARIABLE</span> <span class="pre">&lt;var&gt;</span></code></dt><dd><p>Report the output from running the executable in a given variable.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_STDOUT_VARIABLE</span> <span class="pre">&lt;var&gt;</span></code></dt><dd><div class="versionadded">
<p><span class="versionmodified added">New in version 3.25.</span></p>
</div>
<p>Report the output of stdout from running the executable in a given variable.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_STDERR_VARIABLE</span> <span class="pre">&lt;var&gt;</span></code></dt><dd><div class="versionadded">
<p><span class="versionmodified added">New in version 3.25.</span></p>
</div>
<p>Report the output of stderr from running the executable in a given variable.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">WORKING_DIRECTORY</span> <span class="pre">&lt;var&gt;</span></code></dt><dd><div class="versionadded">
<p><span class="versionmodified added">New in version 3.20.</span></p>
</div>
<p>Run the executable in the given directory. If no <code class="docutils literal notranslate"><span class="pre">WORKING_DIRECTORY</span></code> is
specified, the executable will run in <code class="docutils literal notranslate"><span class="pre">&lt;bindir&gt;</span></code> or the current build
directory.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">ARGS</span> <span class="pre">&lt;args&gt;...</span></code></dt><dd><p>Additional arguments to pass to the executable when running it.</p>
</dd>
</dl>
</section>
<section id="other-behavior-settings">
<h2><a class="toc-backref" href="#id3" role="doc-backlink">Other Behavior Settings</a><a class="headerlink" href="#other-behavior-settings" title="Permalink to this heading">¶</a></h2>
<p>Set variable <span class="target" id="index-0-variable:CMAKE_TRY_COMPILE_CONFIGURATION"></span><a class="reference internal" href="../variable/CMAKE_TRY_COMPILE_CONFIGURATION.html#variable:CMAKE_TRY_COMPILE_CONFIGURATION" title="CMAKE_TRY_COMPILE_CONFIGURATION"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_TRY_COMPILE_CONFIGURATION</span></code></a> to choose a build
configuration:</p>
<ul class="simple">
<li><p>For multi-config generators, this selects which configuration to build.</p></li>
<li><p>For single-config generators, this sets <span class="target" id="index-0-variable:CMAKE_BUILD_TYPE"></span><a class="reference internal" href="../variable/CMAKE_BUILD_TYPE.html#variable:CMAKE_BUILD_TYPE" title="CMAKE_BUILD_TYPE"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_BUILD_TYPE</span></code></a> in
the test project.</p></li>
</ul>
</section>
<section id="behavior-when-cross-compiling">
<h2><a class="toc-backref" href="#id4" role="doc-backlink">Behavior when Cross Compiling</a><a class="headerlink" href="#behavior-when-cross-compiling" title="Permalink to this heading">¶</a></h2>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.3: </span>Use <code class="docutils literal notranslate"><span class="pre">CMAKE_CROSSCOMPILING_EMULATOR</span></code> when running cross-compiled binaries.</p>
</div>
<p>When cross compiling, the executable compiled in the first step
usually cannot be run on the build host.  The <code class="docutils literal notranslate"><span class="pre">try_run</span></code> command checks
the <span class="target" id="index-0-variable:CMAKE_CROSSCOMPILING"></span><a class="reference internal" href="../variable/CMAKE_CROSSCOMPILING.html#variable:CMAKE_CROSSCOMPILING" title="CMAKE_CROSSCOMPILING"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_CROSSCOMPILING</span></code></a> variable to detect whether CMake is in
cross-compiling mode.  If that is the case, it will still try to compile
the executable, but it will not try to run the executable unless the
<span class="target" id="index-0-variable:CMAKE_CROSSCOMPILING_EMULATOR"></span><a class="reference internal" href="../variable/CMAKE_CROSSCOMPILING_EMULATOR.html#variable:CMAKE_CROSSCOMPILING_EMULATOR" title="CMAKE_CROSSCOMPILING_EMULATOR"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_CROSSCOMPILING_EMULATOR</span></code></a> variable is set.  Instead it
will create cache variables which must be filled by the user or by
presetting them in some CMake script file to the values the executable
would have produced if it had been run on its actual target platform.
These cache entries are:</p>
<dl class="simple">
<dt><code class="docutils literal notranslate"><span class="pre">&lt;runResultVar&gt;</span></code></dt><dd><p>Exit code if the executable were to be run on the target platform.</p>
</dd>
<dt><code class="docutils literal notranslate"><span class="pre">&lt;runResultVar&gt;__TRYRUN_OUTPUT</span></code></dt><dd><p>Output from stdout and stderr if the executable were to be run on
the target platform.  This is created only if the
<code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_VARIABLE</span></code> or <code class="docutils literal notranslate"><span class="pre">OUTPUT_VARIABLE</span></code> option was used.</p>
</dd>
</dl>
<p>In order to make cross compiling your project easier, use <code class="docutils literal notranslate"><span class="pre">try_run</span></code>
only if really required.  If you use <code class="docutils literal notranslate"><span class="pre">try_run</span></code>, use the
<code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_STDOUT_VARIABLE</span></code>, <code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_STDERR_VARIABLE</span></code>,
<code class="docutils literal notranslate"><span class="pre">RUN_OUTPUT_VARIABLE</span></code> or <code class="docutils literal notranslate"><span class="pre">OUTPUT_VARIABLE</span></code> options only if really
required.  Using them will require that when cross-compiling, the cache
variables will have to be set manually to the output of the executable.
You can also &quot;guard&quot; the calls to <code class="docutils literal notranslate"><span class="pre">try_run</span></code> with an <span class="target" id="index-0-command:if"></span><a class="reference internal" href="if.html#command:if" title="if"><code class="xref cmake cmake-command docutils literal notranslate"><span class="pre">if()</span></code></a>
block checking the <span class="target" id="index-1-variable:CMAKE_CROSSCOMPILING"></span><a class="reference internal" href="../variable/CMAKE_CROSSCOMPILING.html#variable:CMAKE_CROSSCOMPILING" title="CMAKE_CROSSCOMPILING"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_CROSSCOMPILING</span></code></a> variable and
provide an easy-to-preset alternative for this case.</p>
</section>
</section>


            <div class="clearer"></div>
          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <div>
    <h3><a href="../index.html">Table of Contents</a></h3>
    <ul>
<li><a class="reference internal" href="#">try_run</a><ul>
<li><a class="reference internal" href="#try-compiling-and-running-source-files">Try Compiling and Running Source Files</a></li>
<li><a class="reference internal" href="#other-behavior-settings">Other Behavior Settings</a></li>
<li><a class="reference internal" href="#behavior-when-cross-compiling">Behavior when Cross Compiling</a></li>
</ul>
</li>
</ul>

  </div>
  <div>
    <h4>Previous topic</h4>
    <p class="topless"><a href="try_compile.html"
                          title="previous chapter">try_compile</a></p>
  </div>
  <div>
    <h4>Next topic</h4>
    <p class="topless"><a href="ctest_build.html"
                          title="next chapter">ctest_build</a></p>
  </div>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../_sources/command/try_run.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="ctest_build.html" title="ctest_build"
             >next</a> |</li>
        <li class="right" >
          <a href="try_compile.html" title="try_compile"
             >previous</a> |</li>
  <li>
    <img src="../_static/cmake-logo-16.png" alt=""
         style="vertical-align: middle; margin-top: -2px" />
  </li>
  <li>
    <a href="https://cmake.org/">CMake</a> &#187;
  </li>
  <li>
    <a href="../index.html">3.27.4 Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-commands.7.html" >cmake-commands(7)</a> &#187;</li>
        <li class="nav-item nav-item-this"><a href="">try_run</a></li> 
      </ul>
    </div>

    <div class="footer" role="contentinfo">
        &#169; Copyright 2000-2023 Kitware, Inc. and Contributors.
      Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.3.0.
    </div>
  </body>
</html>